package com.huitong.common.mybatis.domain;

import com.github.pagehelper.Page;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

import static org.springframework.http.HttpStatus.OK;

/**
 * 分页信息响应结果
 *
 * @author fromdrowning
 * @date 2024/4/28 下午1:05
 */
@Data
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class PageResult<T> implements Serializable {

    /**
     * 序列化版本号
     */
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 响应给前端的状态码
     */
    private int code;

    /**
     * 响应给前端的消息内容
     */
    private String message;

    /**
     * 响应给前端的总记录数
     */
    private long total;

    /**
     * 响应给前端的当前页数据集合
     */
    private List<T> records;

    /**
     * 成功
     *
     * @param page 分页信息
     * @return 当前页数据集合 总记录数 状态码200 “操作成功”
     */
    public static <T> PageResult<T> success(Page<T> page) {
        return newInstance(page.getResult(), page.getTotal());
    }

    /**
     * 构造{@link PageResult}对象
     *
     * @param records 响应给前端的当前页数据集合
     * @param total   响应给前端的总记录数
     * @return 当前页数据集合 总记录数 状态码 消息内容
     */
    private static <T> PageResult<T> newInstance(List<T> records, long total) {
        return new PageResult<>(OK.value(), "操作成功", total, records);
    }
}
